home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 06 - 1990 / 06.03 Mar 90 / Mouse Source / TrackKey.c < prev    next >
Encoding:
C/C++ Source or Header  |  1989-07-22  |  1.3 KB  |  54 lines  |  [TEXT/KAHL]

  1. /*                                            TrackKey.c                                            */
  2. /*
  3.  * Copyright © 1989 Martin Minow. All rights reserved.
  4.  *
  5.  * TrackKey(key, track_handle)
  6.  * key                    The character to insert
  7.  * track_handle    The TrackRecord handle.
  8.  *
  9.  * Replace the selection character, leaving an insertion
  10.  * point just past the inserted charcter.  If the key
  11.  * is backspace (hex 08), the selection or character
  12.  * before the insertion point is deleted.
  13.  *
  14.  * Note: we don't do "arrow-key" selection as described
  15.  * in Inside Mac, volume IV.
  16.  */
  17. #include "TrackEdit.h"
  18. #define TR    (*tr)
  19.  
  20. void
  21. TrackKey(c, track_handle)
  22. CHAR                c;
  23. TrackHandle    track_handle;
  24. {
  25.         register TrackPtr    tr;
  26.         _Track_state            state;
  27.         DOT                                start;
  28.         char                            text[1];
  29.         
  30.         tr = _Track_lock(track_handle, &state);
  31.         start = TR.selStart;
  32.         if (c != '\b') {
  33.             _Track_do_clear(track_handle, FALSE, FALSE);
  34.             tr = (*track_handle);
  35.             text[0] = c;
  36.             _Track_do_insert(tr, TR.selStart, text, 1L);
  37.             TR.selStart++;
  38.             TR.selEnd = TR.selStart;
  39.         }
  40.         else {
  41.             /*
  42.              * Backspace cuts the selection, or, if there is
  43.              * none, the preceeding character.
  44.              */
  45.             if (TR.selEnd == TR.selStart
  46.              && TR.selStart > 0)
  47.                 --TR.selStart;
  48.             start = TR.selStart;
  49.             _Track_do_clear(track_handle, FALSE, FALSE);
  50.         }
  51.         _Track_rebuild(track_handle, start);
  52.         _Track_unlock(&state);
  53. }
  54.